package com.zzvcom.utils;

import java.util.ArrayList;
import java.util.Map;
import java.util.regex.Pattern;

import com.googlecode.jsonplugin.JSONException;
import com.googlecode.jsonplugin.JSONPopulator;
import com.googlecode.jsonplugin.JSONUtil;

/**
 * @author faylai
 */

public abstract class JsonUtil
{

    /**
     * 函数介绍 利用 jsonplugin 对象和json字符互转 参数： 返回值：
     */

//    public static class A
//    {
//
//        private List<User> data = new ArrayList<User>();
//
//        public List<User> getData()
//        {
//            return data;
//        }
//
//        public void setData(List<User> data)
//        {
//            this.data = data;
//        }
//
//    }
//    
//    public static void main(String[] args)
//    {
//        User user = new User();
//        user.setId("123");
//        user.setEmail("faylai@tom.com");
//
//        String jsonstr = "{'data':[{'email':'faylai@tom.com','id':'123'}]}";
//
//        A a = (A) jsonToObject(jsonstr, new A());
//
//        System.out.println(objectToJson(user));
//
//        System.out.println(a.data.get(0).getEmail());
//    }

    public static String objectToJson(Object obj)
    {

        try
        {
            // 最后两个参数 忽略继承关系和忽略空值
            return JSONUtil.serialize(obj, new ArrayList<Pattern>(),
                    new ArrayList<Pattern>(), false, false);
        }
        catch (JSONException e)
        {
            throw new RuntimeException(e.getCause());
        }

    }

    @SuppressWarnings("unchecked")
    public static Object jsonToObject(String jsonstr, Object target)
    {
        try
        {
            JSONPopulator pop = new JSONPopulator();
            Object obj = JSONUtil.deserialize(jsonstr);
            if (obj instanceof Map)
            {
                pop.populateObject(target, (Map) JSONUtil.deserialize(jsonstr));
                return target;
            }
            else
            {
                throw new Exception("不是标准的json 格式");
            }

        }
        catch (Exception e)
        {
            e.printStackTrace();
            throw new RuntimeException(e.getCause());
        }

    }



}
